<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // // 1.JS延迟加载的方式有哪些？（5）
        (1) 用defer属性(2) 将js内容放在body最下面

        // // 2.前端 JavaScript 中的 ECMAScript、DOM、BOM 的含义；（5）
        ECMAScript-- -- -- -- --是ECMA组织制定的一套标准

        DOM-- -- -- -- -- - 是document Object model文档对象模型

        BOM-- -- -- -- -- - 是brower Object moedl 浏览器对象模型

        // // 3.JavaScript 的数据类型有哪些？（5）
        简单数据类型(String, Number, Boolean, undefined, null, Symbol)
        引用数据类型(Object, Array, function)

        // // 4.如何进行数据类型的判断？（5）
        (1) instanceof
            (2) typeof(3) Object.prototype.toString.call()

        // // 5.null 和 undefined 的区别？什么时候会得到 undefined？（5）
        undefined-- - 表示已声明但未赋值， 空值
        null-- - 表示空的对象， 空的对象指针


        // // 6.如何理解 null == undefined 返回 true，null === undefined 返回 false？（5）
            ==
            表示值相等 ===
            表示全等， 数据类型和值都需要相等

        // // 7.使用 continue 或 break 终止循环时，两种方式的区别是？（5）
        continue -- -- -- - 中断当前循环， 进入下一次循环
        break -- -- - 终止整个循环

        // // 8.如何判断字符串内是否包含指定字符？（5）
        indexOf().lastIndexOf()

        // // 9.请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；（5）
        会修改原数组的数组方法： splice, reverse, fill, sort, push, pop, unshift, shift
        不会修改原数组的数组方法： slice, map, forEach, every, some, filter, reduce, entries, find, concat

        // // 10. 请写出下面语句的输出结果：（5）
        // var bar = true,
        //     number = 0;
        // console.log(bar + 0); //1
        // console.log(bar + "xyz"); //'truexyz'
        // console.log(bar + true); //2
        // console.log(+true); //1
        // console.log(!'bluej'); //false
        // console.log(number++); //0
        // console.log(++number); //2
        // console.log(number); //2

        // 11. 根据用户输入时间实现倒计时，输入格式错误时要有所提示（5）
        // window.prompt("请输入目标时间");

        let endDate = new Date(window.prompt("请输入目标时间"))
        let timer;

        function timeFn(endDate) {
            let nowDate = new Date();
            let tDiff = parseInt((endDate.getTime() - nowDate.getTime()) / 1000)
            if (tDiff > 0) {
                let y = endDate.getFullYear() - nowDate.getFullYear();
                let m = endDate.getMonth() - nowDate.getMonth();
                let d = parseInt(tDiff / 60 / 60 / 24)
                let h = parseInt(tDiff / 60 / 60 % 24)
                let min = parseInt(tDiff / 60 % 60)
                let s = tDiff % 60

                y = padT(y), m = padT(m), d = padT(d), h = padT(h), min = padT(min), s = padT(s);
                console.clear();
                console.log('距离输入的时间还有：' + y + '年' + m + "月" + d + "日" + h + "时" + min + "分" + s + "秒");
            } else {

                console.clear();
                console.log("请输入正确格式，如xxxx-xx-xx xx:xx:xx");

            }
        }
        timer = setInterval(function() {
            timeFn(endDate);
        }, 1000);

        function padT(t) {
            return (t < 10) ? '0' + t : t;
        }

        // // 13.把下面数组成员排序打乱；（5）
        var arr1 = [10, 20, 30, 40, 50, 60];
        let newarr1 = [];
        for (let i = 0; i < arr1.length; i++) {
            let ran = Math.floor(Math.random() * arr1.length)
            if (!newarr1.includes(arr1[ran])) {
                newarr1.push(arr1[ran])
            } else {
                i--
            }
        }
        console.log(newarr1);

        // // 12.输出从小到大排序好的五个不重复的随机"素数",范围[10-58)；（10）
        let arr3 = [];

        while (true) {
            if (arr3.length == 5) {
                break
            }
            let num = Math.floor((Math.random() * 48) + 10)
            if (!arr3.includes(num)) {
                arr3.push(num);
            }
        }
        console.log(arr3);


        // // 14. 将多个数组进行去重合并；（10）
        var arr1 = [1, 2, 3],
            arr2 = [2, 3, 4, 5];

        var arr1 = [1, 2, 3],
            arr2 = [2, 3, 4, 5];

        let newarr = arr1.concat(arr2)
        let arr3;
        arr3 = newarr.filter(function(item, index) {
            if (newarr.indexOf(item) == newarr.lastIndexOf(item)) {
                return item
            }
        })

        console.log(arr3);



        // // 15. 找出数组 arr=[1, 2, 3, "melon", 4, "melon", 2, 4, "melon"] 中重复出现过的元素,并用数组将重复元素装起来输出,并且统计每个元素出现的次数（10）

        let arr2 = [1, 2, 3, "melon", 4, "melon", 2, 4, "melon"]
        let newarr2 = [];
        let count = 0;
        for (let i = 0; i < arr2.length; i++) {

            for (let j = i + 1; j < arr2.length; j++) {

                if (arr2[i] == arr2[j] && (newarr2.indexOf(arr2[i]) == -1)) {
                    newarr2.push(arr2[j]);
                    count++
                }
            }
        };
        console.log(newarr2);
        console.log(count);

        // 16. 找出数组中年龄小于18岁的女生的信息重新组成新的数组,并且将她们count变为现有的平方（10）
        var arr = [{
            name: "111",
            sex: "boy",
            age: 18,
            count: 20
        }, {
            name: "222",
            sex: "girl",
            age: 17,
            count: 30
        }, {
            name: "333",
            sex: "boy",
            age: 16,
            count: 40
        }, {
            name: "444",
            sex: "girl",
            age: 15,
            count: 50
        }, {
            name: "555",
            sex: "boy",
            age: 20,
            count: 60
        }, {
            name: "666",
            sex: "girl",
            age: 13,
            count: 70
        }, {
            name: "777",
            sex: "boy",
            age: 14,
            count: 80
        }];
        for (let i = 0; i < arr.length; i++) {
            if (arr[i]['age'] < 18) {
                console.log(arr[i]);
                console.log(arr[i]['age']['count'] * arr[i]['age']['count']);
            }
        }
    </script>
</body>

</html>